Expanded Main Page
Jump to navigation
Jump to search
Display: Short view - Expanded view
Introduction
Basic Information
- Introduction
- Required Knowledge
- Beginner Mistakes
- Getting Started
- How To Ask Questions
- GCC Cross-Compiler
- What Order Should I Make Things In?
- Licensing
- Tutorials
- Frequently Asked Questions
Environment
- How kernel, compiler, and C library work together
- Using other Languages than C
- UEFI and legacy BIOS (PC)
- Inline Assembly (including examples)
- Object Files and relocation
Bare Bones / Baby Steps
- Bare Bones (C and C++)
- Ada Bare Bones
- C Sharp Bare Bones
- D Bare Bones
- FreeBasic Bare Bones
- Go Bare Bones
- Pascal Bare Bones
- Limine Bare Bones
- The BabyStep Tutorial
Example OS Organization
Booting and Setup
- Boot Sequence
- Diskless Booting
- The Global Descriptor Table and a GDT Tutorial
- Interrupts
- Getting Keyboard Input
Testing and Debugging
Development
Compiler Development
Design Considerations
Kernel Models
- Monolithic Kernel
- Microkernel
- Exokernel and related models
- Modular Kernel
Task Models
Memory and Resource Management
- Memory management - Overview and Introduction
- Segmentation
- Paging
- Memory Allocation
- Page Frame Allocation
- Memory Management Unit, or in-depth description of recursive mappings
- File Management
- File Systems
System Calls
Scheduling
- Processes and Threads
- Context Switching
- Scheduling Algorithms
- Multiprocessor Scheduling
- Blocking Process - processes sleeping and waiting
Process Sychronization
- Synchronization Primitives - Semaphores, mutexes, spinlocks et al.
- Signals
Inter-Process Communication
Resources
- Books on OS Development
- Academic Papers on theory and design
- Assembly
- Disk Images with preinstalled GRUB
- Deprecated, yet relevant, bits of specifications
- Chip Numbers, Acronyms and Things
- Resources
Tools
Bootloaders
Compilers
Assemblers
- GAS (GNU as, part of binutils)
- FASM
- NASM
- YASM
- On the difference between AT&T and Intel Opcode syntax
Linkers
- LD (GNU ld, part of binutils)
- Link Archiver (GNU ar, part of binutils)
- Mold (Modern Linker)
Emulators
Working with Disk Images
- Disk Images in general, and ...
- Loopback Device for Linux, *BSD et al.
- hdiutil for MacOS X
- Windows Tools
Hardware
- The Hardware Category and linked resources
CPU
General
- Register Machine Model of Computation
- Memory Architecture
- Instruction Set Architecture
- Execution Architecture
X86
Modes
Other
- IA32 Architecture Family
- Model Specific Registers (MSRs)
- Detecting CPU Speed
- Inline Assembly/Examples
- CPU Bugs
- SSE
- Where Can I Find Information About Ports
- CPU Registers (x86, x86-64)
ESA/390
- Kernel Barebones
- Program Status Word
- Processing Storage Area Memory Mapping
- z/OS DataSet FileSystem
- Batch I/O Channel SubSystem
ARM
Memory
- Detecting Memory (x86)
- A20 Line or "Why can't I access all my memory?"
IRQs and Exceptions, PIC, NMI, APIC, OPIC
- I Can't Get Interrupts Working
- The Interrupt Descriptor Table and IDT problems
- Interrupt Service Routines (ISRs)
- Interrupts
- Non Maskable Interrupt (NMI)
- APIC
- PIC
- OPIC
Clocks, Timers and Counters
- HPET
- APIC timer (per-processor timer)
- Programmable Interval Timer (PIT)
- The CMOS clock, and its RTC chip
- Detecting CPU Speed
Video
- Accelerated Graphic Cards
- Detecting Colour and Monochrome Monitors?
- Printing To Screen in Protected Mode
- Text Mode Cursor
- Drawing In a Linear Framebuffer
- Kernel Stdio Theory
- VGA Resources and VGA Hardware documentation
- Drawing characters in graphics mode using VGA Fonts
- Video Signals And Timing
- How to program Bochs' and QEMU's BGA graphics device
Audio
Storage devices
Input/Output
- PS/2 Keyboard
- Mouse
- Serial Ports (primarily RS-232)
Plug and Play
PCI, USB and things like this ...
UEFI
- UEFI
- Systems with broken UEFI implementations
ACPI
Network cards and communicating devices
- Ethernet and other wired networking:
- Wireless Networking:
- 802.11 (WiFi standard)
Non-x86 Development
Reference Information
Executable File Types
Filesystems